using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using SIP.PN.FrontEnd.Code;
using SIP.PN.FrontEnd.Code.JSon;
using SIP.PN.FrontEnd.controles;
using SIP.PN.Servicios.Interfaces.DTO;
using SIP.PN.Servicios.Interfaces.Excepciones;

namespace SIP.PN.FrontEnd
{
    public partial class CrudTarea : PaginaCrud<TareaDTO>
    {
        #region Propiedades

        protected Acciones Accion
        {
            get { return (Acciones) ViewState["Accion"]; }
            set { ViewState["Accion"] = value; }
        }

        #endregion

        #region Metodos

        public override void Inicializar()
        {
            cabecera.SetearMenuSolapa(MenuSolapas.Tarea);
            IList<EspecialidadDTO> list = SrvAplicacion.ListarEspecialidad(string.Empty);
            Utilidades.BindearComboBox(ddl_especilidad, list, "Nombre", "Codigo", false);

            Accion = ObtenerParametro<Acciones>("Accion");
            TareaDTO entidad = null;
            switch(Accion)
            {
                case Acciones.Nuevo:
                    lbl_titulo.Text = "Nueva Tarea";
                    break;
                case Acciones.Editar:
                    lbl_titulo.Text = "Editar Tarea";
                    entidad = SrvTarea.Obtener(ObtenerParametro<string>("Codigo"));
                    txt_codigo.Enabled = false;
                    break;
            }
            cva_codigo.Enabled = txt_codigo.Enabled;
            if (entidad != null)
                CargarFormulario(entidad);
        }

        public override void Seguridad()
        {
            cabecera.VisibilidadBotonNuevo = false;
            cabecera.VisibilidadBotonBuscar = true;
            cabecera.VisibilidadBotonGuardar = true;
            cabecera.VisibilidadBotonCancelar = true;
            cabecera.VisibilidadBotonVolver = false;
            cabecera.VisibilidadBotonExportar = false;
            cabecera.VisibilidadBotonAyuda = true;
        }

        public override void CargarFormulario(TareaDTO entidad)
        {
            txt_codigo.Text = entidad.Codigo;
            txt_nombre.Text = entidad.Nombre;
            txt_descripcion.Text = entidad.Descripcion;
            ddl_especilidad.SelectedValue = entidad.Especialidad.Codigo;
        }

        public override void Guardar()
        {
            try
            {
                switch (Accion)
                {
                    case Acciones.Nuevo:
                        SrvTarea.Crear(txt_codigo.Text, txt_nombre.Text, txt_descripcion.Text, ddl_especilidad.SelectedValue);
                        break;
                    case Acciones.Editar:
                        SrvTarea.Modificar(txt_codigo.Text, txt_nombre.Text, txt_descripcion.Text, ddl_especilidad.SelectedValue);
                        break;
                }
                Cancelar();
            }
            catch (ExcepcionCodigoUtilizado ex)
            {
                cva_codigo.ErrorMessage = ex.Message;
                cva_codigo.IsValid = false;
            }
            catch(Exception ex)
            {
                cabecera.MostrarLeyenda(ex.Message);
            }
        }

        public override void Cancelar()
        {
            Response.Redirect("BuscadorTarea.aspx");
        }

        public override void AjaxFuncions(string funcion)
        {
            string text = string.Empty;
            if (funcion.Equals("validarcodigo"))
            {

                string codigo = Request["codigo"];
                TareaDTO entidad = SrvTarea.Obtener(codigo);
                IStatus status;
                if (entidad == null)
                {
                    status = new StatusSuccess();
                }
                else
                {
                    status = new StatusError();
                    status.FeedbackMessage = new ExcepcionCodigoUtilizado().Message;
                }
                text = JsonConvert.SerializeObject(status);
            }
            Response.Clear();
            Response.Write(text);
            Response.End();
        }

        #endregion

        #region Eventos

        protected void cabecera_OnBuscarClick(object sender, EventArgs e)
        {
            Cancelar();
        }

        protected void cabecera_OnGuardarClick(object sender, EventArgs e)
        {
            Guardar();
        }

        protected void cabecera_OnCancelarClick(object sender, EventArgs e)
        {
            Cancelar();
        }

        #endregion
    }
}
